Token* ChineseTokenizer::next() { 
	while(!rd.Eos()){

		char_t ch = rd.GetNext(); 
		if( isSpace((char_t)ch)!=0 ){ 
			continue; 
		} 
		// Read for Alpha-Nums and Chinese 
		if( isAlNum((char_t)ch)!=0 ){ 
			start = rd.Column(); 

			return ReadChinese(ch); 
		}
	}
	return NULL; 
} 

Token* ChineseTokenizer::ReadChinese(const char_t prev){

	bool isChinese = false; 
	StringBuffer str; 
	str.append(prev); 

	char_t ch = prev; 

	if(((char_t)ch>>8)&&(char_t)ch>=0xa0){
		isChinese = true; 
	}
	while(!rd.Eos() && isSpace((char_t)ch)==0 ){ 
	
		ch = rd.GetNext(); 

		if(isAlNum((char_t)ch)!=0){ 

			//是数学或英语就读到下一个空格.或下一个汉字 
			//是汉字.就读下一个汉字组成词组,或读到空格或英文结束 
			if(isChinese){

				//汉字,并且ch是汉字 
				if(((char_t)ch>>8)&&(char_t)ch>=0xa0){

					// 返回上一个汉字 
					str.append(ch); 
					rd.UnGet(); 
					// wprintf(_T("[%s]"),str); 
					return new Token(str.getBuffer(), start, rd.Column(), tokenImage[lucene::analysis::chinese::CHINESE] ); 
				}else{ 
					//是字母或数字或空格 
					rd.UnGet(); 
					// wprintf(_T("[%s]"),str); 
					return new Token(str.getBuffer(), start, rd.Column(), tokenImage[lucene::analysis::chinese::CHINESE] ); 
				} 
			}else { 
				//非汉字 
				// ch是汉字 
				if(((char_t)ch>>8)&&(char_t)ch>=0xa0){
					// wprintf(_T("[%s]"),str); 
					rd.UnGet(); 
					return new Token(str.getBuffer(), start, rd.Column(), tokenImage[lucene::analysis::chinese::CHINESE] ); 
				} 
				str.append( ch ); 
			}
		}
	}
	// wprintf(_T("[%s]"),str); 
	return new Token(str.getBuffer(), start, rd.Column(), tokenImage[lucene::analysis::chinese::ALPHANUM] ); 
}
